home *** CD-ROM | disk | FTP | other *** search
/ ASME's Mechanical Engine…ing Toolkit 1997 December / ASME's Mechanical Engineering Toolkit 1997 December.iso / intel / pas-8087.lzh / PAS87.ASM < prev   
Assembly Source File  |  1987-01-27  |  5KB  |  370 lines

  1. PAGE 64,132
  2. TITLE LISTING 1 - PAS87 PASCAL SUPPORT FOR 8087
  3. ;
  4. ;    ************    BYTE MAGAZINE     ***************
  5. ;            SEPTEMBER 1983
  6.  
  7. MEMOP    MACRO    P1,P2
  8.     PUSH    BP
  9.     MOV    BP,SP
  10.     MOV    BP,[BP+6]
  11.     P1 P2 [BP]
  12.     POP    BP
  13.     RET    2
  14. ENDM
  15.  
  16. PASSTACK MACRO R1,R2,R3
  17.     LOCAL FLAG
  18.     PUSH    BP
  19.     MOV    BP,SP
  20.     MOV    BX,OFFSET FLAG+2
  21.     MOV    AL,CS:[BX]
  22.     AND    AL,0F8H
  23.     OR    AL,[BP+6]
  24.     MOV    CS:[BX],AL
  25.     JMP    FLAG
  26. FLAG:
  27.     R1 R2 R3
  28.     POP     BP
  29.     RET    2
  30. ENDM
  31.  
  32. PAGE
  33.  
  34. PAS87     MACRO P1,P2,P3
  35.     IFB <P2>
  36.         PUBLIC F_&P1
  37.         F_&P1 PROC FAR
  38.         P1
  39.         RET
  40.         F_&P1 ENDP
  41.     ELSE
  42.         IFIDN <P2>,<SHORT>
  43.             PUBLIC FSHORT_&P1
  44.             FSHORT_&P1 PROC FAR
  45.             MEMOP P1 P2
  46.             FSHORT_&P1 ENDP
  47.         ELSE
  48.             IFIDN <P2>,<LONG>
  49.                 PUBLIC FLONG_&P1
  50.                 FLONG_&P1 PROC FAR
  51.                 MEMOP P1 P2
  52.                 FLONG_&P1 ENDP
  53.             ELSE
  54.                 IFIDN <P2>,<TEMP>
  55.                     PUBLIC FTEMP_&P1
  56.                     FTEMP_&P1 PROC FAR
  57.                     MEMOP P1 P2
  58.                     FTEMP_&P1 ENDP
  59.                 ELSE
  60.                     IFIDN <P2>,<WORD>
  61.                     PUBLIC FWORD_&P1
  62.                     FWORD_&P1 PROC FAR
  63.                     MEMOP P1 P2
  64.                     FWORD_&P1 ENDP
  65.                     ELSE    
  66.                     IFIDN <P2>,<ST>
  67.                        PUBLIC FST_&P1
  68.                        FST_&P1 PROC FAR
  69.                         PASSTACK P1 P2 P3
  70.                        FST_&P1 ENDP
  71.                         ELSE
  72.                        IFIDN <P2>,<SPECIAL>
  73.                         PUBLIC FSPEC_&P1
  74.                         FSPEC_&P1 PROC FAR            
  75.                         MEMOP P1
  76.                            FSPEC_&P1 ENDP
  77.                     ELSE
  78.                        PUBLIC FSTI_&P1
  79.                        FSTI_&P1 PROC FAR
  80.                        PASSTACK P1 P2 P3
  81.                        FSTI_&P1 ENDP
  82.                     ENDIF
  83.                     ENDIF
  84.                 ENDIF
  85.                ENDIF
  86.               ENDIF        
  87.         ENDIF
  88.     ENDIF
  89. ENDM
  90.  
  91. IF1
  92.     INCLUDE A:M8087.MAC
  93. ENDIF
  94.  
  95. ASSUME CS:CODE, DS:CODE
  96. CODE  SEGMENT
  97.  
  98. PAS87    FABS
  99. PAS87    FADD
  100. PAS87    FADD    ST,ST(i)
  101. PAS87    FADD    ST(i),ST
  102. PAS87    FADD    SHORT
  103. PAS87    FADD    LONG
  104. PAS87    FADDP
  105. PAS87    FADDP    ST(i),ST
  106. PAS87    FBLD    SPECIAL
  107. PAS87    FBSTP    SPECIAL
  108. PAS87    FCHS
  109. PAS87    FCLEX
  110. PAS87    FCOM
  111. PAS87    FCOM    ST(i)
  112. PAS87    FCOM    SHORT
  113. PAS87    FCOM    LONG
  114. PAS87    FCOMP
  115. PAS87    FCOMP    ST(i)
  116. PAS87    FCOMP    SHORT
  117. PAS87    FCOMP    LONG
  118. PAS87    FCOMPP
  119. PAS87    FDECSTP
  120. PAS87    FDISI
  121. PAS87    FDIV
  122. PAS87    FDIV    ST(i),ST
  123. PAS87    FDIV    SHORT
  124. PAS87    FDIV    LONG
  125. PAS87    FDIVP    ST(i),ST
  126. PAS87    FDIVR
  127. PAS87    FDIVR    ST,ST(i)
  128. PAS87    FDIVR    ST(i),ST
  129. PAS87    FDIVR    SHORT
  130. PAS87    FDIVR    LONG
  131. PAS87    FDIVRP    ST(i),ST
  132. PAS87    FENI
  133. PAS87    FFREE    ST(i)    
  134. PAS87    FIADD    WORD
  135. PAS87    FIADD    SHORT
  136. PAS87    FICOM    WORD
  137. PAS87    FICOM    SHORT
  138. PAS87    FICOMP    WORD
  139. PAS87    FICOMP    SHORT
  140. PAS87    FIDIV    WORD
  141. PAS87    FIDIV    SHORT
  142. PAS87    FIDIVR    WORD
  143. PAS87    FIDIVR    SHORT    
  144. PAS87    FILD    WORD
  145. PAS87    FILD    SHORT
  146. PAS87    FILD    LONG
  147. PAS87    FIMUL    WORD
  148. PAS87    FIMUL    SHORT
  149. PAS87    FINCSTP
  150. PAS87    FINIT
  151. PAS87    FIST    WORD
  152. PAS87    FIST    SHORT
  153. PAS87    FISTP    WORD
  154. PAS87    FISTP    SHORT
  155. PAS87    FISTP    LONG
  156. PAS87    FISUB    WORD
  157. PAS87    FISUB    SHORT
  158. PAS87    FISUBR    WORD
  159. PAS87    FISUBR    SHORT
  160. PAS87    FLD    ST(i)
  161. PAS87    FLD    SHORT    
  162. PAS87    FLD    LONG
  163. PAS87    FLD    TEMP
  164. PAS87    FLDCW    SPECIAL
  165. PAS87    FLDENV    SPECIAL    
  166. PAS87    FLDLG2
  167. PAS87    FLDLN2    
  168. PAS87    FLDL2E
  169. PAS87    FLDL2T
  170. PAS87    FLDPI
  171. PAS87    FLDZ
  172. PAS87    FLD1
  173. PAS87    FMUL
  174. PAS87    FMUL    ST(i),ST
  175. PAS87    FMUL    ST,ST(i)
  176. PAS87    FMUL    SHORT
  177. PAS87    FMUL    LONG
  178. PAS87    FMULP    ST(i),ST
  179. PAS87    FNCLEX
  180. PAS87    FNDISI
  181. PAS87    FNENI
  182. PAS87    FNINIT
  183. PAS87    FNOP
  184. PAS87    FNSAVE    SPECIAL
  185. PAS87    FNSTCW    SPECIAL
  186. PAS87    FNSTENV    SPECIAL
  187. PAS87    FNSTSW    SPECIAL
  188. PAS87    FPATAN
  189. PAS87    FPREM
  190. PAS87    FPTAN
  191. PAS87    FRNDINT
  192. PAS87    FRSTOR    SPECIAL
  193. PAS87    FSAVE    SPECIAL
  194. PAS87    FSCALE
  195. PAS87    FSQRT
  196. PAS87    FST    ST(i)
  197. PAS87    FST    SHORT
  198. PAS87    FST    LONG
  199. PAS87    FSTCW    SPECIAL
  200. PAS87    FSTENV    SPECIAL
  201. PAS87    FSTP    ST(i)
  202. PAS87    FSTP    SHORT
  203. PAS87    FSTP    LONG
  204. PAS87    FSTP    TEMP
  205. PAS87    FSTSW    SPECIAL
  206. PAS87    FSUB    
  207. PAS87    FSUB    ST,ST(i)
  208. PAS87    FSUB    ST(i),ST
  209. PAS87    FSUB    SHORT
  210. PAS87    FSUB    LONG
  211. PAS87    FSUBP    ST(i),ST
  212. PAS87    FSUBR
  213. PAS87    FSUBR    ST(i),ST
  214. PAS87    FSUBR    ST,ST(i)
  215. PAS87    FSUBR    SHORT
  216. PAS87    FSUBR    LONG
  217. PAS87    FSUBRP    ST(I),ST
  218. PAS87    FTST
  219. PAS87    FWAIT
  220. PAS87    FXAM
  221. PAS87    FXCH
  222. PAS87    FXCH    ST(i)
  223. PAS87    FXTRACT
  224. PAS87    FYL2X
  225. PAS87    FYL2XP1
  226. PAS87    F2XM1
  227.  
  228. PAGE
  229.  
  230. ;PROCEDURE C_IBM_8087(VAR X : REAL);
  231.  
  232. PUBLIC C_IBM_8087
  233.  
  234. C_IBM_8087    PROC    FAR
  235.     PUSH    BP
  236.     MOV    BP,SP
  237.     MOV    BP,[BP+6]
  238.     MOV    AX,[BP+2]
  239.     CMP    AX,0
  240.     JNE    CONTIBM
  241.     CMP    WORD PTR [BP],0
  242.     JE    EXITIBM
  243. CONTIBM:
  244.     DEC    AH
  245.     DEC    AH
  246.     RCL    AL,1
  247.     RCR    AH,1
  248.     RCR    AL,1
  249.     MOV    [BP+2],AX
  250. EXITIBM:
  251.     POP    BP
  252.     RET    2
  253. C_IBM_8087    ENDP
  254.  
  255. ;PROCEDURE C_8087_IBM(VAR X : REAL);
  256.  
  257. PUBLIC C_8087_IBM
  258.  
  259. C_8087_IBM    PROC    FAR
  260.     PUSH    BP
  261.     MOV    BP,SP
  262.     MOV    BP,[BP+6]
  263.     MOV    AX,[BP+2]
  264.     CMP    AX,0
  265.     JNE    CONT8087
  266.     CMP    WORD PTR [BP],0
  267.     JE    EXIT8087
  268. CONT8087:
  269.     RCL    AL,1
  270.     RCL    AH,1
  271.     RCR    AL,1
  272.     INC    AH
  273.     INC    AH
  274.     MOV    [BP+2],AX
  275. EXIT8087:
  276.     POP    BP
  277.     RET    2
  278. C_8087_IBM    ENDP
  279.  
  280. ;FUNCTION CHK87 : INTEGER
  281.  
  282. PUBLIC CHK87
  283.  
  284. CHK87    PROC    FAR
  285.     PUSH    AX
  286.     PUSH    BP
  287.     MOV    BP,SP
  288.     FSTSW    [BP+2]
  289.     POP    BP
  290.     POP    AX
  291.     SAHF
  292.     JB    A_LESS_OR_UNORDERED
  293.     JNE    A_GREATER
  294. A_EQUAL:
  295.     MOV    AL,0
  296.     JMP    SHORT EXIT_CHK
  297. A_GREATER:
  298.     MOV    AL,1
  299.     JMP    SHORT    EXIT_CHK
  300. A_LESS_OR_UNORDERED:
  301.     JNE    A_LESS
  302. A_B_UNORDERED:
  303.     MOV    AL,3
  304.     JMP    SHORT EXIT_CHK
  305. A_LESS:
  306.     MOV    AL,2
  307. EXIT_CHK:
  308.     MOV    AH,0
  309.     RET
  310. CHK87    ENDP
  311.  
  312. ;FUNCTION EXAM87 : INTEGER
  313.  
  314. PUBLIC    EXAM87
  315. EXAM87    PROC    FAR
  316.     FXAM
  317.     PUSH    AX
  318.     PUSH    BP
  319.     MOV    BP,SP
  320.     FSTSW    [BP+2]
  321.     POP    BP
  322.     POP    AX
  323.     MOV    AL,AH
  324.     AND    AX,4007H
  325.     SHR    AH,1
  326.     SHR    AH,1
  327.     SHR    AH,1
  328.     OR    AL,AH
  329.     MOV    AH,0
  330.     RET
  331. EXAM87    ENDP
  332. PAGE    
  333.  
  334. ;FUNCTION GETST : INTEGER
  335.  
  336. PUBLIC GETST
  337.  
  338. GETST    PROC    FAR
  339.     PUSH    AX
  340.     PUSH    BP
  341.     MOV    BP,SP
  342.     FSTSW    [BP+2]
  343.     POP    BP
  344.     POP    AX
  345.     MOV    AL,AH
  346.     AND    AX,0038H
  347.     SHR    AL,1
  348.     SHR    AL,1
  349.     SHR    AL,1
  350.     RET
  351. GETST    ENDP
  352.  
  353. ;FUNCTION STATUS : INTEGER
  354.  
  355. PUBLIC STATUS
  356.  
  357. STATUS     PROC     FAR
  358.     PUSH    AX
  359.     PUSH    BP
  360.     MOV    BP,SP
  361.     FSTSW    [BP+2]
  362.     POP    BP
  363.     POP    AX
  364.     MOV    AH,0
  365.     RET
  366. STATUS    ENDP
  367.  
  368. CODE    ENDS
  369. END
  370. STAT